首页 > 试题广场 >

字符串排序

[编程题]字符串排序
  • 热度指数:275268 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

如,输入: By?e 输出: Be?y

数据范围:输入的字符串长度满足


输入描述:
输入字符串


输出描述:
输出字符串
示例1

输入

A Famous Saying: Much Ado About Nothing (2012/8).

输出

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    const args = [];
    let time = 1;
    while (line = await readline()) {
        time--;
        args.push(line);
        if (time === 0) {
            break;
        }
    }
    let [str] = args;
    let word = str.match(/[a-z]/gi).sort((a,b) => {
        return a.toUpperCase().charCodeAt() - b.toUpperCase().charCodeAt()
    }).join("");
    let output = "";
    let wordIndex = 0;
    for(var i=0;i<str.length;i++){
        if(/[a-z]/i.test(str[i])){
            output += word[wordIndex];
            wordIndex++;
        }else{
            output += str[i];
        }
    }
    console.log(output)
}()


发表于 2023-02-23 10:14:20 回复(0)
const line = readline();
let sorted = new Array(26).fill(''),aCode = 'a'.charCodeAt(0),ACode='A'.charCodeAt(0);
for(let s of line){
    const sCode = s.charCodeAt(0);
   if(/[a-z]/.test(s)){
       sorted[sCode-aCode] +=s;
   }else if(/[A-Z]/.test(s)){
       sorted[sCode-ACode] +=s;
   }
}
sorted=sorted.join('').split('');
for(let i=0;i<line.length;i++){
    if(/[^a-zA-Z]+/.test(line[i])){
        sorted.splice(i,0,line[i]);
    }
}
console.log(sorted.join(''))

发表于 2022-08-07 16:03:38 回复(0)
var line=readline();
var eng=line.match(/[a-zA-Z]/g);
var arr=[];
for(let i=0;i<eng.length;i++){
    arr[i]={key:i,value:eng[i]};
}
arr.sort(function(a,b){
    if(a.value.toUpperCase()!=b.value.toUpperCase()){
        return a.value.toUpperCase().charCodeAt()-b.value.toUpperCase().charCodeAt();
    }else{
       return a.key-b.key;
    }
});
var out="";
var j=0;
for(let i=0;i<line.length;i++){
    if(line.charAt(i).match(/[a-zA-Z]/g)==null){
        out+=line.charAt(i);
    }else{
        out+=arr[j].value;
        j++;
    }
}
 console.log(out)

发表于 2022-05-24 14:44:11 回复(0)
var str = readline();
var match = str.match(/[a-zA-Z]/g);
match.sort(function(a,b) {
    return a.toLowerCase() >= b.toLowerCase() ? 1 : -1   
})
for(var i = 0; i < str.length; i++) {
    if(!/[a-zA-Z]/.test(str[i])) {
        match.splice(i,0,str[i]);
    }
}
console.log(match.join(''))
这为啥 chrome控制台出来的结果,跟提交代码出来的结果不一样呢、、、

有没有大佬解释一下
发表于 2022-05-04 11:57:30 回复(3)
let line =''
while(line = readline()){
const reg = new RegExp(/[a-zA-Z]/)
const str = line
const list = str.split('').filter(item=>{
    return reg.test(item)
}).map(item=>item.toLowerCase()) // 求出整个字符串中出现的字母,并转化为小写之后去重
const strset = Array.from(new Set(list)).sort()
const res = []
for(let i of strset){
    for(let j in str){
        if(str[j].toLowerCase().charCodeAt() == i.charCodeAt()){
            res.push(str[j])
        }
    }
}
for(let u in str){
    if(!reg.test(str[u])){
        res.splice(u,0,str[u])
    }
}
console.log(res.join(''))
}



发表于 2022-04-14 15:26:28 回复(0)